
#pragma once

namespace atr {

/**
 * @brief Namespace only for internal use of atr library
 * @details Please don't use this namespace outside the atr library. IF you REALLY need to - do it with special care.
 */
namespace __ {

template <unsigned long Position, class ... Types>
    struct __at {};

template<class Type, class ... Types>
    struct __at<0, Type, Types...> { using type = Type; };

template<unsigned long Position, class Type, class ... Types>
    struct __at<Position, Type, Types...> : public __at<Position-1,Types...> {};

} // namespace __
} // namespace atr